package com.warm.pump.module.sys.service.impl;

import com.warm.pump.module.sys.bean.SysRoleDto;
import com.warm.pump.module.sys.bean.po.gen.SysRole;
import com.warm.pump.module.sys.dao.gen.SysRoleDao;
import com.warm.pump.module.sys.service.ISysRoleMenuService;
import com.warm.pump.module.sys.service.ISysRoleService;
import com.warm.pump.module.sys.service.ISysUserRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 角色实现类
 *
 * @date 2016年9月18日 上午9:45:12
 */
@Service("sysRoleService")
public class SysRoleServiceImpl implements ISysRoleService {
    @Autowired
    private SysRoleDao sysRoleDao;
    @Autowired
    private ISysRoleMenuService sysRoleMenuService;
    @Autowired
    private ISysUserRoleService sysUserRoleService;

    /**
     * 根据角色ID，查询角色
     */
    public SysRole queryObject(Long roleId) {
        return sysRoleDao.selectByPrimaryKey(roleId);
    }

    /**
     * 查询所有角色
     */
    public List<SysRole> queryList(Map<String, Object> map) {
        return sysRoleDao.getListByMap(map);
    }

    /**
     * 统计所有角色总数
     */
    public int queryTotal(Map<String, Object> map) {
        return sysRoleDao.countTotalByMap(map);
    }

    /**
     * 持久化角色
     */
    @Transactional
    public void save(SysRoleDto role) {
        role.setCreateTime(new Date());
        sysRoleDao.insertSelective(role);

        // 保存角色与菜单关系
        sysRoleMenuService.saveOrUpdate(role.getRoleId(), role.getMenuIdList());
    }

    /**
     * 更新角色
     */
    @Transactional
    public void update(SysRoleDto role) {
        sysRoleDao.updateByPrimaryKeySelective(role);

        // 更新角色与菜单关系
        sysRoleMenuService.saveOrUpdate(role.getRoleId(), role.getMenuIdList());
    }

    /**
     * 批量删除角色
     */
    @Transactional
    public void deleteBatch(Long[] roleIds) {

        Map<String, Object> condMap = new HashMap<>();
        condMap.put("roleId_in", roleIds);
        sysRoleDao.deleteByMap(condMap);
    }
}
